import "dart:async";

main(List<String> args) {
  print("main start");

  Future(() => print("task1"));

  final future = Future(() => null);

// future的链式调用作为一个整体顺序调用task，结束后再进行下一个微队列和事件队列的执行操作
  Future(() {
    print("task2");
  }).then((_) {
    scheduleMicrotask(() => print('task4'));
    print("task3");
  }).then((_) => print("task5"));

  future.then((_) => print("task6"));
  scheduleMicrotask(() => print('task7'));

  Future(() => print('task8'))
      .then((_) => Future(() => print('task9')))
      .then((_) => print('task10'));

  print("main end");
}

/*代码分析
1、main函数先执行，所以main start和main end先执行，没有任何问题；
2、main函数执行过程中，会将一些任务分别加入到EventQueue和MicrotaskQueue中；
3、task7通过scheduleMicrotask函数调用，所以它被最早加入到MicrotaskQueue，会被先执行；
4、然后开始执行EventQueue，task1被添加到EventQueue中被执行；
5、通过final future = Future(() => null);创建的future的then被添加到微任务中，微任务直接被优先执行，所以会执行task6；
6、一次在EventQueue中添加task2、task3、task5被执行；这里future的链式调用作为一个整体顺序调用task，结束后再进行下一个微队列和事件队列的执行操作
7、task3的打印执行完后，调用scheduleMicrotask，那么在执行完这次的EventQueue后会执行，所以在task5后执行task4（注意：scheduleMicrotask的调用是作为task3的一部分代码，所以task4是要在task5之后执行的）
8、task8、task9、task10一次添加到EventQueue被执行；
*/